#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent) 
    , ui(new Ui::Widget)
    , m_dragging(false)
{
    ui->setupUi(this);
    
    //======================= 1.底层窗口透明 =======================//
    this->setWindowFlag(Qt::FramelessWindowHint);
    
    this->setAttribute(Qt::WA_TranslucentBackground);
    
    this->setFixedSize(900 , 600);
    
    //======================= 3.标题设计 =======================//
    this->Window_Title = new QLabel(this);
    this->Window_Title->setText("1196KK");
    this->Window_Title->setFont(QFont("华文隶书" , 13));
    this->Window_Title->setStyleSheet("color: #6FB3B8");
    this->Window_Title->setAlignment(Qt::AlignCenter);
    
    this->Window_Title->setFixedSize(150 , 40);
    
    this->Window_Title->move((this->width()/2) - (this->Window_Title->width()/2) , 0);
    
    //======================= 4.菜单设置 =======================//
    ui->label_1->Set_Text("智能对话");
    ui->label_1->Set_Image(":/new/prefix1/智能对话");
    ui->label_2->Set_Text("视觉识别");
    ui->label_2->Set_Image(":/new/prefix1/视觉识别");
    ui->label_3->Set_Text("智能家居");
    ui->label_3->Set_Image(":/new/prefix1/智能家居");
    ui->label_4->Set_Text("天气预报");
    ui->label_4->Set_Image(":/new/prefix1/天气预报");
    ui->label_5->Set_Text("工控大屏");
    ui->label_5->Set_Image(":/new/prefix1/工控大屏");
    ui->label_6->Set_Text("电机控制");
    ui->label_6->Set_Image(":/new/prefix1/电机控制");
    
    // 3.3 连接菜单按钮信号
    connect(ui->label_1   ,   &button_menu::signals_click , this ,   &Widget::slots_click_menu );
    connect(ui->label_2   ,   &button_menu::signals_click , this ,   &Widget::slots_click_menu );
    connect(ui->label_3   ,   &button_menu::signals_click , this ,   &Widget::slots_click_menu );
    connect(ui->label_4   ,   &button_menu::signals_click , this ,   &Widget::slots_click_menu );
    connect(ui->label_5   ,   &button_menu::signals_click , this ,   &Widget::slots_click_menu );
    connect(ui->label_6   ,   &button_menu::signals_click , this ,   &Widget::slots_click_menu );
    
    
    /*************************** 4、页面设置 ***************************/
    // 4.1 初始化界面类
    Widget_Smart_chat         = new Widget_funcA_Smart_chat(this);              // 初始化智能对话界面类
    Widget_Smart_vision       = new widget_funcb_smart_vision(this);            // 初始化视觉识别界面类
    Widget_Smart_Home         = new widget_funcc_smart_home(this);              // 初始化智能家居界面类
    Widget_Weather            = new widget_funcd_weather(this);                 // 初始化天气预报界面类
    Widget_Control_industrial = new Widget_funcE_Control_industrial(this);      // 初始化工控大屏界面类
    Widget_Control_motor      = new Widget_funcF_Control_motor(this);           // 初始化电机控制界面类
    
    
    // 4.2 插入到主页面
    ui->Stackedwidget->addWidget(Widget_Smart_chat);                            // 将智能对话界面插入到 stackedWidget
    ui->Stackedwidget->addWidget(Widget_Smart_vision);                          // 将视觉识别界面插入到 stackedWidget
    ui->Stackedwidget->addWidget(Widget_Smart_Home);                            // 将智能家居界面插入到 stackedWidget
    ui->Stackedwidget->addWidget(Widget_Weather);                               // 将天气预报界面插入到 stackedWidget
    ui->Stackedwidget->addWidget(Widget_Control_industrial);                    // 将工控大屏界面插入到 stackedWidget
    ui->Stackedwidget->addWidget(Widget_Control_motor);                         // 将电机控制界面插入到 stackedWidget
    
    // 设定尺寸
    Widget_Smart_chat->setFixedSize(730,530);                                  // 设置智能对话页面尺寸
    Widget_Smart_vision->setFixedSize(730,530);                                // 设置视觉识别页面尺寸
    Widget_Smart_Home->setFixedSize(730,530);                                  // 设置智能家居页面尺寸
    Widget_Weather->setFixedSize(730,530);                                     // 设置天气预报页面尺寸
    Widget_Control_industrial->setFixedSize(730,530);                          // 设置工控大屏页面尺寸
    Widget_Control_motor->setFixedSize(730,530);                               // 设置电机控制页面尺寸
    
    
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
    // 不使用这个变量
    Q_UNUSED (event);
    
    /*************************** 绘制背景 ***************************/
    // 背景为浅蓝色
    QPainter painter(this);
    
    // 开启抗锯齿
    painter.setRenderHint(QPainter::Antialiasing);  
    
    QPen pen;
    pen.setColor(QColor(240,248,255));
    pen.setWidth(0);
    
    // 设置画刷
    QBrush Brush;
    Brush.setColor(QColor(240,248,255));
    Brush.setStyle(Qt::SolidPattern);
    
    // 设定画笔 画刷
    painter.setPen(pen);
    painter.setBrush(Brush);
    
    // 绘制图形
    painter.drawRoundedRect(this->rect() , 12 , 12);
    
}

void Widget::enterEvent(QEvent *event)
{
    //不使用这个变量
    Q_UNUSED(event);
}

void Widget::leaveEvent(QEvent *event)
{
    //不使用这个变量
    Q_UNUSED(event);
}

void Widget::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton){
        m_dragStartPosition = event->globalPos();
        m_dragging = false;
        m_pressTimer.start(100 , this);
    }
    Qt::MouseButton Mouse_buttton = event->button();
    
    //获取左键按下的坐标
    if(Qt::LeftButton == Mouse_buttton)
    {
         this->Mouse_Press_Pos = event->pos();
        //获取标题区域位置和大小
        QRect title_Rect = this->Window_Title->rect();
        QPoint label_Pos = this->Window_Title->mapFromParent(event->pos());
        //判断鼠标是否在标题区域内
        if(title_Rect.contains(label_Pos)){
            //显示彩蛋
            this->Window_Title->setText("我真帅!");
        }
    }
}

void Widget::mouseReleaseEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
        m_pressTimer.stop();
        m_dragging = false;
    }
    //不使用这个变量
    Q_UNUSED(event);
    Qt::MouseButton Mouse_buttton = event->button();
    
    //获取左键按下的坐标
    if(Qt::LeftButton == Mouse_buttton)
    {
         this->Mouse_Press_Pos = event->pos();
        //获取标题区域位置和大小
        QRect title_Rect = this->Window_Title->rect();
        QPoint label_Pos = this->Window_Title->mapFromParent(event->pos());
        //判断鼠标是否在标题区域内
        if(title_Rect.contains(label_Pos)){
            //显示彩蛋
            this->Window_Title->setText("1196KK");
        }
    }
    
}

void Widget::mouseMoveEvent(QMouseEvent *event)
{
    if(m_dragging)
    {
        QPoint delta = event->globalPos() - m_dragStartPosition;
        move(x() + delta.x() , y()+delta.y());
        m_dragStartPosition = event->globalPos();
    }
}

void Widget::timerEvent(QTimerEvent *event)
{
    if(event->timerId() == m_pressTimer.timerId())
    {
        m_pressTimer.stop();
        m_dragging = true;
    }
}

void Widget::slots_click_menu()
{
    /*
     * 实现方法：
     *    - 如果是当前按钮点击，则切换页面，并且内部会将该按钮变换颜色；
     *    - 如果不是当前按钮，则更新状态码为 Mode_No(-1)，让按钮恢复为白色，保证按钮互斥操作。
     */
    
    // 判断是那个发出的信号
    QObject * senderobj = sender();
    
    // 智能对话
    if(senderobj != ui->label_1)
    {
        // 更新状态码 
        ui->label_1->update_start(Mode_No);
    }
    else
    {
        // 切换页面
        ui->Stackedwidget->setCurrentIndex(PAGE_SMART_CHAT);
    }
    
    // 视觉识别
    if(senderobj != ui->label_2)
    {
        // 更新状态码
        ui->label_2->update_start(Mode_No);
    }
    else
    {
        // 切换页面
        ui->Stackedwidget->setCurrentIndex(PAGE_VISION_RECOG);
    }
    
    // 智能家居
    if(senderobj != ui->label_3)
    {
        // 更新状态码
        ui->label_3->update_start(Mode_No);
    }
    else
    {
        // 切换页面
        ui->Stackedwidget->setCurrentIndex(PAGE_SMART_HOME);
    }
    
    // 天气预报
    if(senderobj != ui->label_4)
    {
        // 更新状态码
        ui->label_4->update_start(Mode_No);
    }
    else
    {
        // 切换页面
        ui->Stackedwidget->setCurrentIndex(PAGE_WEATHER);
    }
    
    // 工控大屏
    if(senderobj != ui->label_5)
    {
        // 更新状态码
        ui->label_5->update_start(Mode_No);
    }
    else
    {
        // 切换页面
        ui->Stackedwidget->setCurrentIndex(PAGE_CONTROL_SCREEN);
    }
    
    // 电机控制
    if(senderobj != ui->label_6)
    {
        // 更新状态码
        ui->label_6->update_start(Mode_No);
    }
    else
    {
        // 切换页面
        ui->Stackedwidget->setCurrentIndex(PAGE_MOTOR);
    }
}

